package com.itheima.a07myzipstream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipStreamDemo3 {
    public static void main(String[] args) throws IOException {
        //压缩整个文件夹

        //创建file对象再写一个压缩方法
        File start = new File("D:\\Java\\bbb");
        File parentFile = start.getParentFile();
        String name = start.getName();
        File end = new File(parentFile,name+".zip");
        //创建压缩流对象并关联本地文件
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(end));
        //压缩
        toZip(start,name,zos);
        zos.close();
    }
    public static void toZip(File start, String name, ZipOutputStream zos) throws IOException {
        //已经有了要压缩的文件夹地址和要压缩到的地址，现在创建压缩流对象读取压缩包内容就行

        //进入要压缩的文件夹，把里面的文件拿出来遍历
        File[] files = start.listFiles();
        for (File file : files) {
            System.out.println(file);
            if (file.isDirectory()) {
                //文件夹，递归
                toZip(file,name+"\\"+file.getName(),zos);
            }else {
                //是文件，变成zipEntry对象并添加到压缩包
                ZipEntry zipEntry = new ZipEntry(name+"\\"+file.getName());
                zos.putNextEntry(zipEntry);
                //读取文件内容并写入压缩包
                FileInputStream fis=new FileInputStream(file);
                int i;
                while ((i=fis.read())!=-1){
                    zos.write(i);
                }
                fis.close();
                zos.closeEntry();
            }
        }

    }
}
